iT邦幫忙

2021 iThome 鐵人賽

DAY 2
3

grep

grep(Global search a Regular Expression and Print)
是Linux系統中很常用來搜尋特定字串或樣式的工具.
用來查找文字內容或是某個檔案.
且通常在每個Linux發行版本都預先有安裝,
就算沒安裝也能透過apt-getyum等等的套件管理器進行安裝.
且能搭配Regexp做匹配查找或過濾.

grep跟PowerShell的Select-String功能與目的都雷同

格式

grep [option] pattern [file1 file2...]
or
stdout | grep [option] pattern

Option

  • -v 不顯示匹配行資訊, 也就是反向查找
  • -i 搜尋時忽略大小寫
  • -n 顯示行號
  • -r 遞迴搜尋
  • -E 支持Regex
  • -F 不支持Regexp, 按照字面意思查找
  • -c 只顯示匹配的總行數
  • -w 只顯示匹配整個詞的行
  • -x 只顯示整行都匹配
  • -l 只顯示文件名稱, 不顯示其內容
  • -s 不顯示錯誤資訊
  • -q 不列印任何資訊

嘗試

來簡單玩一下

grep '^root' /etc/passwd /etc/shadow

https://ithelp.ithome.com.tw/upload/images/20210906/20104930wQTXSCjKEt.png

這裡用的是格式1, 讀取檔案的方式
^root 是我們的pattern匹配樣式, 這裡用到Regexp, 表示該行以root開始
/etc/passwd /etc/shadow這裡是兩個檔案
最前面是顯示有匹配到的檔案, grep會把匹配到的單字, 給HighLight起來.

有時候就只是想要知道執行結果的話, 能透過$?來觀察.
當grep有找到匹配項目時, 結束狀態會是0
沒找到匹配內容時, 結束狀態則是1
找不到指定文件時, 則是2

剛剛的例子, 改造一下

grep '^root' /etc/passwd /etc/shadow; echo $?

https://ithelp.ithome.com.tw/upload/images/20210907/20104930bj8SYIBpA9.png
利用echo做打印, 能看到輸出為0, 因為有找到匹配內容

grep '^ithome' /etc/passwd /etc/shadow; echo $?

https://ithelp.ithome.com.tw/upload/images/20210907/20104930hRpXfZjbf8.png
能看到輸出為1, 因為找不到匹配內容

grep '^ithome' /etc/passwddddddd; echo $?

https://ithelp.ithome.com.tw/upload/images/20210907/20104930qjTWmQVTbN.png
能看到輸出為2, 因為找不到檔案

----參考來源
鳥哥Linux私房菜 $?


上一篇
聊系統文字工具與服務日誌可視性淺談的緣由
下一篇
grep - 2 用更多Option
系列文
系統與服務雜談33
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言